package day240510.final_demo;

public class FinalVariable {
    //对每种变量进行final验证
    final int instanceVariable;
    final static int CLASS_VARIABLE ;
    public FinalVariable() {
        // 如果注释下面的代码，就类似于留了一个后门，
        // 从这个后门进来时 instanceVariable 没有初始值，与 final 冲突了
        instanceVariable = 1;
    }

    public FinalVariable(int instanceVariable) {
        this.instanceVariable = instanceVariable;
    }
    static {
        CLASS_VARIABLE = 3;
    }
    public void localVariableWithFinal() {
        final int i = 9;
        // Cannot assign a value to final variable 'i'
        //i++;
    }
    public void parameterWithFinal(final int x) {
        // Cannot assign a value to final variable 'x'
        //x++;
    }
    public void parameterWithFinal(final MyClass myClass) {
        //myClass.x++; // 可以。myClass 的值（地址值）并没被改变
        //myClass = new MyClass(); // 不行。这里真正了改变了 myClass 的值（地址值）
    }
}

    class MyClass {
        int x;
    }
